/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package semac.control;

import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import semac.entidades.Persona;

/**
 *
 * @author Luigi
 */
public class CtrlPersonas {
    private Conexion connection;
    private ResultSet resultado;
    private String query;
    private HttpServletRequest request;

    public CtrlPersonas() throws IOException, ParserConfigurationException, SAXException{
        request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
        String urlFile =  request.getRealPath("/")+ "/WEB-INF/dataBase.xml";
        connection =  new Conexion(urlFile);
    }

    //Metodo que obtiene el codigo de la persona en base a la identidad de la persona
    public int getCodigoPersona(String identidad) throws ClassNotFoundException,SQLException{
        connection.startConnection();
        query = "select codigo_persona"
                + " from semac.persona"
                + " where identidad_persona = '" + identidad + "'";
        resultado = connection.execute(query);
        resultado.next();
        int codigoPersona = resultado.getInt("codigo_persona");
        connection.closeConnection();
        return codigoPersona;
    }

    //Metodo que obtiene los datos de la persona en base al codigo
    public Persona getPersona(int codigoPersona) throws ClassNotFoundException,SQLException{
        Persona persona;
        connection.startConnection();
        query = "select *"
                + " from semac.persona"
                + " where codigo_persona = " +  codigoPersona;
        resultado = connection.execute(query);
        resultado.next();
        int codigoPer = resultado.getInt("codigo_persona");
        String identidad = resultado.getString("identidad_persona");
        String nombre = resultado.getString("nombre_persona");
        String apellido = resultado.getString("apellido_persona");
        String telefono = resultado.getString("telefono_persona");
        String celular = resultado.getString("celular_persona");
        String domicilio = resultado.getString("domicilio_persona");
        char sexo = resultado.getString("sexo_persona").charAt(0);
        String email = resultado.getString("email_persona");
        Date tempDate = resultado.getDate("fechacreacion");
        GregorianCalendar fechaCreacion = new GregorianCalendar(tempDate.getYear(), tempDate.getMonth(), tempDate.getDate());
        tempDate = resultado.getDate("fechamodificacion");
        GregorianCalendar fechaModificacion = new GregorianCalendar(tempDate.getYear(), tempDate.getMonth(), tempDate.getDate());
        int ultimoAcceso = resultado.getInt("codigo_cuenta");
        persona = new Persona(codigoPer,identidad,nombre,apellido,telefono,celular,domicilio,sexo,email
                ,fechaCreacion,fechaModificacion,ultimoAcceso);
        connection.closeConnection();
        return persona;
    }

    //Metodo que actualiza los datos de una persona en la base de datos
    public void updatePersona(Persona nuevaPersona) throws ClassNotFoundException,SQLException{
        connection.startConnection();
        query = "update semac.persona"
                + " set identidad_persona = '" + nuevaPersona.getIdentidad()
                + "'," + "nombre_persona = '" + nuevaPersona.getNombre() + "'," + "apellido_persona = '" + nuevaPersona.getApellido()
                + "'," + "telefono_persona = '" + nuevaPersona.getTelefono() + "'," + "celular_persona = '" + nuevaPersona.getCelular()
                + "'," + "domicilio_persona = '" + nuevaPersona.getDomicilio() + "'," + "sexo_persona = '" + nuevaPersona.getSexo()
                + "'," + "email_persona = '" + nuevaPersona.getEmail() + "'," + "fechacreacion = '" + nuevaPersona.getFechaCreacion().getTime().getDate()
                + "/" + (nuevaPersona.getFechaCreacion().getTime().getMonth() + 1) + "/" + (nuevaPersona.getFechaCreacion().getTime().getYear() + 1900)
                + "'," + "fechamodificacion = '" + nuevaPersona.getFechaModificacion().getTime().getDate()
                + "/" + (nuevaPersona.getFechaModificacion().getTime().getMonth() + 1) + "/" + (nuevaPersona.getFechaModificacion().getTime().getYear() + 1900)
                + "'," + "codigo_cuenta" + nuevaPersona.getUltimoAcceso()
                + " where codigo_persona = " + nuevaPersona.getCodigo();
        connection.execute(query);
        connection.closeConnection();
    }

    //Metodo que inserta una persona en la base de datos
    public void insertPersona(Persona persona) throws ClassNotFoundException,SQLException{
        connection.startConnection();
        query = "insert into semac.persona (identidad_persona,nombre_persona,apellido_persona,"
                + "telefono_persona,celular_persona,domicilio_persona,sexo_persona,email_persona,"
                + "fechacreacion,fechamodificacion,codigo_cuenta)"
                + " values('" + persona.getIdentidad()
                + "','" + persona.getNombre() + "','" + persona.getApellido()
                + "','" + persona.getTelefono() + "','" + persona.getCelular()
                + "','" + persona.getDomicilio() + "','" + persona.getSexo()
                + "','" + persona.getEmail() + "','" + persona.getFechaCreacion().getTime().getDate()
                + "/" + (persona.getFechaCreacion().getTime().getMonth() + 1) + "/" + (persona.getFechaCreacion().getTime().getYear() + 1900)
                + "','" + persona.getFechaModificacion().getTime().getDate()
                + "/" + (persona.getFechaModificacion().getTime().getMonth() + 1) + "/" + (persona.getFechaModificacion().getTime().getYear() + 1900)
                + "'," + persona.getUltimoAcceso()+ ")";
        connection.execute(query);
        connection.closeConnection();
    }
}
